package ControlLayer;

import java.util.ArrayList;
import java.util.Date;

import ModelLayer.*;

public interface IFSearch {
	//Search SalesOrder by specific filters
	public ArrayList<SalesOrder> getAllSalesOrders();
	public SalesOrder getSalesOrderById(int salesOrderId);
	public ArrayList<SalesOrder> getSalesOrdersByCustomerId(int customerId);
	public ArrayList<SalesOrder> getSalesOrdersByCustomerName(String customerName);
	public ArrayList<SalesOrder> getSalesOrdersByStatus(String status);
	public ArrayList<SalesOrder> getSalesOrdersByEmployeeId(int employeeId);
	public ArrayList<SalesOrder> getSalesOrdersByEmployeeName(String employeeName);
	public ArrayList<SalesOrder> getSalesOrdersByDeliveryId(int deliveryId);
	
	//Search Products by specific filters
	public ArrayList<Product> getAllProducts();
	public Product getProductById(int productId);
	public ArrayList<Product> getProductsLikeName(String productName);
	public ArrayList<Product> getProductsInStock();
	public ArrayList<Product> getProductsOutOfStock();
	public ArrayList<Product> getArchivedProducts();
	public ArrayList<Product> getArchivedProductsLikeName(String productName);
	
	//Search Customers by specific filters
	public ArrayList<Contact> getAllCustomers();
	public ArrayList<Private> getAllPrivateCustomers();
	public ArrayList<Business> getAllBusinessCustomers();
	public Contact getCustomerById(int customerId);
	public ArrayList<Contact> getCustomersLikeName(String customerName);
	public ArrayList<Contact> getArchivedCustomers();
	public ArrayList<Contact> getArchivedCustomersLikeName(String customerName);
	
	//Search Employee by specific filters
	public ArrayList<Employee> getAllEmployees();
	public Employee getEmployeeById(int employeeId);
	public ArrayList<Employee> getEmployeesLikeName(String employeeName);
	public ArrayList<Employee> getEmployeesByRole(String role);
	public ArrayList<Employee> getArchivedEmployees();
	public ArrayList<Employee> getArchivedEmployeesLikeName(String employeeName);
	
	//Search Delivery by specific filters
	public ArrayList<Delivery> getAllDelivery();
	public Delivery getDeliveryById();
	public ArrayList<Delivery> getDeliveriesOnDate(Date deliveryDate);
	public ArrayList<Delivery> getDeliveriesByStatus(String status);
	
	//Statistics searches
	public Employee getMostProductiveEmployee();
	public Contact getBestCustomer();
	public Product getMostSoldProduct();
	//Return all Products that are equal or below the minimum stock
	public ArrayList<Product> checkStock();
}